package com.bjgov.scoresys.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;

/**
 * 日期处理工具类
 */

public class DateUtil {
	private static final TimeZone timeZone = TimeZone.getTimeZone("GMT+08:00");

	/**
	 * @param msel
	 *            毫秒时间
	 * @return 毫秒时间 所对应的"yyyy-MM-dd HH:mm"格式的日期
	 */

	public static String formatDateTime(long msel) {
		Date date = new Date(msel);
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
		formatter.setTimeZone(timeZone);
		return formatter.format(date);
	}

	public static String formatDate(long msel) {
		Date date = new Date(msel);
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
		formatter.setTimeZone(timeZone);
		return formatter.format(date);
	}
	
	/**
	 * 格式化日期
	 * @param date
	 * @param format
	 * @return
	 * 		返回指定格式的日期时间字符串
	 */
	public static String formatDate(Date date, String format) {
		SimpleDateFormat formatter = new SimpleDateFormat(format);
		formatter.setTimeZone(timeZone);
		return formatter.format(date);
	}

	/**
	 * 得到系统当前的年
	 * 
	 * @return
	 */
	public static int getCurrentYear() {
		GregorianCalendar calendar = new GregorianCalendar();
		return calendar.get(Calendar.YEAR);
	}

	/**
	 * 得到系统当前的月份
	 * 
	 * @return
	 */
	public static int getCurrentMonth() {
		GregorianCalendar calendar = new GregorianCalendar();
		return calendar.get(Calendar.MONTH) + 1;
	}

	/**
	 * 得到系统当前的日期
	 * 
	 * @return
	 */
	public static int getCurrentDay() {
		GregorianCalendar calendar = new GregorianCalendar();
		return calendar.get(Calendar.DAY_OF_MONTH);
	}

	public static long getCurrentMSEL() {
		GregorianCalendar calendar = new GregorianCalendar();
		return calendar.getTimeInMillis();
	}

	/**
	 * 将一个字符串的日期描述转换为java.util.Date对象
	 * 
	 * @param strDate
	 *            字符串的日期描述
	 * @param format
	 *            字符串的日期格式，比如:“yyyy-MM-dd HH:mm”
	 * @return 字符串转换的日期对象java.util.Date
	 * @throws ParseException 
	 */
	public static Date getDate(String strDate, String format) throws ParseException {
		if (strDate == null || strDate.trim().equals("")) {
			return null;
		}
		SimpleDateFormat formatter = new SimpleDateFormat(format);
		formatter.setTimeZone(timeZone);
		Date date;
		date = formatter.parse(strDate);
		return date;
	}

	/**
	 * 将字符串型的时间转换为毫秒数，格式默认为yyyy-MM-dd HH:mm
	 * 
	 * @param Date
	 * @return
	 */
	public static long getMSEL(String strDate) throws ParseException {
		Date date = getDate(strDate, "yyyy-MM-dd HH:mm");
		if (date == null) {
			return 0l;
		} else {
			return date.getTime();
		}
	}
	
	/**
	 * 判断两日期间隔，如果date1>date2,则返回true，否则false
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static boolean distance(Date date1, Date date2) {
		long d1 = date1.getTime();
		long d2 = date2.getTime();
		return d1-d2>0?true:false;
	}
}